﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Com.Alipay;

namespace AUV5.Web.Alipay
{
    public partial class Default : PageBaseFrontend
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (base.IsVerified)
            {
                //bool isPayment = false;  //是否去alipay支付

                if (!string.IsNullOrEmpty(Request["OrderID"]))
                {
                    LoadData(Request["OrderID"]);
                }
            }
            else
            {
                Response.Redirect(URL_INDEX);
            }
        }

        //#region## 支付（不去支付定）
        ///// <summary>
        ///// 支付（不去支付定）
        ///// 创建人：Wilson
        ///// 创建时间：2011-11-25
        ///// </summary>
        ///// <param name="orderId"></param>
        //private void OrderPayment(string orderId)
        //{
        //    AUV5.Model.OrderInfo order = AUV5.BLL.OrderInfoBLL.Instance.GetDetail(Request.Params["OrderID"]);

        //    if (order != null)
        //    {
        //        AUV5.Model.OrderItem orderItem = AUV5.BLL.OrderItemBLL.Instance.GetOrderItemByOrderID(order.OrderID);

        //        if (orderItem != null)
        //        {
        //            AUV5.Model.ServiceInfo serviceInfo = AUV5.BLL.ServiceInfoBLL.Instance.GetDetail(orderItem.ServiceID);

        //            if (serviceInfo != null)
        //            {
        //                if (serviceInfo.Shippable)
        //                {
        //                    order.ShipCharge = serviceInfo.NativeShipCharge;
        //                }

        //                order.BeginDate = DateTime.Now;

        //                order.StatusID = Convert.ToInt32(AUV5.Common.Enum.OrderState.Payment);

        //                order.EndDate = AUV5.BLL.OrderInfoBLL.Instance.GetEndTimeByOrderCode(serviceInfo.ServiceID, order.OrderCode);

        //                order.IsLocalPayment = true;

        //                order.Payment = 5;

        //                AUV5.BLL.OrderInfoBLL.Instance.UpdateOrderInfoByOrderCode(order);

        //            }
        //            else
        //            {
        //                throw new Exception("服务不存在");
        //            }
        //        }
        //        else
        //        {
        //            throw new Exception("订单项不存在");
        //        }
        //    }

        //    AlertGo("支付成功", "/Pages/ShoppingDetail.aspx?id=" + order.OrderID);
        //}
        //#endregion


        private void LoadData(string orderId)
        {
            try
            {
                AUV5.Model.OrderInfo orderInfo = AUV5.BLL.OrderInfoBLL.Instance.GetDetail(orderId);

                if (orderInfo != null)
                {

                    AUV5.Model.OrderItem orderItem = AUV5.BLL.OrderItemBLL.Instance.GetOrderItemByOrderID(orderInfo.OrderID);

                    if (orderItem != null)
                    {

                        AUV5.Model.ServiceInfo serviceInfo = AUV5.BLL.ServiceInfoBLL.Instance.GetDetail(orderItem.ServiceID);

                        if (serviceInfo != null)
                        {
                            ////////////////////////////////////////////请求参数////////////////////////////////////////////

                            //必填参数//

                            //请与贵网站订单系统中的唯一订单号匹配
                            string out_trade_no = orderInfo.OrderCode;
                            //订单名称，显示在支付宝收银台里的“商品名称”里，显示在支付宝的交易管理的“商品名称”的列表里。
                            string subject = serviceInfo.Title;
                            //订单描述、订单详细、订单备注，显示在支付宝收银台里的“商品描述”里
                            string body = serviceInfo.Description;
                            //订单总金额，显示在支付宝收银台里的“应付总额”里
                            decimal totalPayment = orderInfo.Total + orderInfo.ShipCharge;

                            string total_fee = String.Format("{0:f2}", totalPayment);
                            
                            //扩展功能参数——默认支付方式//

                            //默认支付方式，代码见“即时到帐接口”技术文档
                            string paymethod = "directPay";
                            //默认网银代号，代号列表见“即时到帐接口”技术文档“附录”→“银行列表”
                            string defaultbank = "ICBCB2C";

                            //扩展功能参数——防钓鱼//

                            //防钓鱼时间戳
                            string anti_phishing_key = "";
                            //获取客户端的IP地址，建议：编写获取客户端IP地址的程序
                            string exter_invoke_ip = "";
                            //注意：
                            //请慎重选择是否开启防钓鱼功能
                            //exter_invoke_ip、anti_phishing_key一旦被设置过，那么它们就会成为必填参数
                            //建议使用POST方式请求数据
                            //示例：
                            //exter_invoke_ip = "";
                            //Service aliQuery_timestamp = new Service();
                            //anti_phishing_key = aliQuery_timestamp.Query_timestamp();               //获取防钓鱼时间戳函数

                            //扩展功能参数——其他//

                            //商品展示地址，要用http:// 格式的完整路径，不允许加?id=123这类自定义参数
                            string show_url = "http://www.auv5.com/Pages/Index.aspx";
                            //自定义参数，可存放任何内容（除=、&等特殊字符外），不会显示在页面上
                            string extra_common_param = serviceInfo.ServiceID + "_" + orderInfo.Buyer;  //自定义参数（服务ID + $ + 买家ID）
                            //默认买家支付宝账号
                            string buyer_email = "";

                            //扩展功能参数——分润(若要使用，请按照注释要求的格式赋值)//

                            //提成类型，该值为固定值：10，不需要修改
                            string royalty_type = "";
                            //提成信息集
                            string royalty_parameters = "";
                            //注意：
                            //与需要结合商户网站自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多只能设置10条
                            //各分润金额的总和须小于等于total_fee
                            //提成信息集格式为：收款方Email_1^金额1^备注1|收款方Email_2^金额2^备注2
                            //示例：
                            //royalty_type = "10";
                            //royalty_parameters = "111@126.com^0.01^分润备注一|222@126.com^0.01^分润备注二";

                            ////////////////////////////////////////////////////////////////////////////////////////////////

                            //把请求参数打包成数组
                            SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
                            sParaTemp.Add("payment_type", "1");
                            sParaTemp.Add("show_url", show_url);
                            sParaTemp.Add("out_trade_no", out_trade_no);
                            sParaTemp.Add("subject", subject);
                            sParaTemp.Add("body", body);
                            sParaTemp.Add("total_fee", total_fee);
                            sParaTemp.Add("paymethod", paymethod);
                            sParaTemp.Add("defaultbank", defaultbank);
                            sParaTemp.Add("anti_phishing_key", anti_phishing_key);
                            sParaTemp.Add("exter_invoke_ip", exter_invoke_ip);
                            sParaTemp.Add("extra_common_param", extra_common_param);
                            sParaTemp.Add("buyer_email", buyer_email);
                            sParaTemp.Add("royalty_type", royalty_type);
                            sParaTemp.Add("royalty_parameters", royalty_parameters);

                            //构造即时到帐接口表单提交HTML数据，无需修改
                            Com.Alipay.Service ali = new Com.Alipay.Service();
                            string sHtmlText = ali.Create_direct_pay_by_user(sParaTemp);
                            Response.Write(sHtmlText);
                        }
                        else
                        {
                            log.Debug("服务不存在");
                            AlertGo("订单不存在", "~/Pages/ShoppingList.aspx");
                        }
                    }
                    else
                    {
                        log.Debug("订单项不存在");
                        AlertGo("订单不存在", "~/Pages/ShoppingList.aspx");
                    }
                }
                else
                {
                    log.Debug("订单不存在");
                    AlertGo("订单不存在", "~/Pages/ShoppingList.aspx");
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
            }

        }

    }
}